/**
 * 
 */
package com.nari.basic.dao;

import java.util.List;

import com.nari.basic.model.IMenu;
import com.nari.coreframe.dao.hibernate3.IGenericDao;

/**
 * 
 * @author Xiaopeng
 * @date 2013-7-18
 */
public interface IMenuDao extends IGenericDao<IMenu, String> {
	
	/**
	 * 查询系统所有菜单
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-7-23
	 */
	public List<IMenu> queryAllMenusInOrder() throws Exception;

	/**
	 * 通过角色唯一识别码查询其对应的菜单列表
	 * @param roleUIDs 角色唯一识别码
	 *   格式：XXX,XXX,XXX
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-7-22
	 */
	public List<IMenu> queryUserMenuByRoleUIDs(String roleUIDs) throws Exception;
	
	/**
	 * 查询菜单根节点，并过滤出权限菜单
	 * @param authorityMenuList 权限菜单，默认无权限过滤
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-7-23
	 */
	public List<IMenu> queryFirstLevelMenu(List<IMenu> authorityMenuList) throws Exception;
	
	/**
	 * 根据父菜单ID查询子菜单节点，并过滤出权限菜单（需要情况下）
	 * @param pMenuID 若父菜单不存在，则查询根节点
	 * @param authorityMenuList 权限菜单，默认无权限过滤
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-7-23
	 */
	public List<IMenu> queryChildMenuByParent(String pMenuID, List<IMenu> authorityMenuList) throws Exception;
	
	/**
	 * 通过菜单名称模糊查询
	 * @param menuName
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-7-24
	 */
	public List<IMenu> queryByMenuNameLike(String menuName) throws Exception;
	
	/**
	 * 通过父菜单ID统计其子菜单的个数
	 * @param pMenuID
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2013-7-24
	 */
	public int countChildrenByPMenuID(String pMenuID) throws Exception;
	
	/**
	 * 通过菜单链接查询查询信息
	 * @param menuAction
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-3-25
	 */
	public IMenu queryMenuByMenuAction(String menuAction) throws Exception;
	
	/**
	 * 通过菜单ID序列查询菜单列表，并按原序列顺序返回
	 * @param menuUidSeq
	 * @return
	 * @throws Exception
	 * @author Xiaopeng
	 * @date 2014-3-25
	 */
	public List<IMenu> queryMenuListBySeq(String menuUidSeq) throws Exception;
}
